package com.artisan.springuitls.demos;

import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.*;

/**
 * CollectionUtils 工具类演示
 * 功能：集合操作防坑神器
 * 优势：自动处理 null，比 Guava 更轻量
 */
@Component
public class CollectionUtilsDemo {

    /**
     * 场景：查询用户标签，安全遍历
     */
    public void processTags(List<String> tags) {
        System.out.println("\n========== CollectionUtils Demo ==========");
        
        // ✅ 一行判空：自动处理 null 和空集合
        if (CollectionUtils.isEmpty(tags)) {
            System.out.println("无标签，跳过处理");
            return;
        }
        
        // 安全遍历
        tags.forEach(tag -> System.out.println("处理标签: " + tag));
    }

    /**
     * 演示更多实用方法
     */
    public void demonstrateMoreMethods() {
        System.out.println("\n--- 集合合并操作 ---");
        
        // 多值 Map 操作
        Map<String, List<String>> multiMap = new HashMap<>();
        List<String> list1 = new ArrayList<>(Arrays.asList("value1"));
        multiMap.put("key1", list1);
        
        // 合并到 Map 中
        CollectionUtils.mergeArrayIntoCollection(new String[]{"value2", "value3"}, list1);
        System.out.println("合并后: " + multiMap); // {key1=[value1, value2, value3]}
        
        // Map 转换为多值 Map
        Properties props = new Properties();
        props.setProperty("name", "张三");
        props.setProperty("age", "25");
        System.out.println("Properties 转 Map: " + CollectionUtils.toMultiValueMap(
            Collections.singletonMap("user", Arrays.asList(props))));
        
        // 集合包含检查
        List<String> list = Arrays.asList("Java", "Spring", "Boot");
        System.out.println("包含 Spring: " + list.contains("Spring")); // true
        
        // 查找第一个元素
        String firstElement = CollectionUtils.firstElement(list);
        System.out.println("第一个元素: " + firstElement); // Java
        
        // 查找最后一个元素
        String lastElement = CollectionUtils.lastElement(list);
        System.out.println("最后一个元素: " + lastElement); // Boot
        
        System.out.println("==========================================\n");
    }

    /**
     * 演示集合包含检查
     */
    public void demonstrateCollectionContains() {
        List<String> list1 = Arrays.asList("a", "b", "c");
        List<String> list2 = Arrays.asList("b", "c");
        
        // 检查是否包含
        boolean containsAny = list1.stream().anyMatch(list2::contains);
        System.out.println("✓ list1 包含 list2 中的元素: " + containsAny);
        
        // 检查是否全部包含
        boolean containsAll = list1.containsAll(list2);
        System.out.println("✓ list1 包含 list2 的所有元素: " + containsAll);
    }
}

